package com.sicheng.lc.周赛.分类.dp.字符串;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/7/19 23:30
 */
public class 通配符匹配 {
    //https://leetcode.cn/problems/wildcard-matching/
    public boolean isMatch(String s, String p) {
        int m = s.length();
        int n = p.length();
        boolean[][] dp = new boolean[m + 1][n + 1];
        dp[0][0] = true;
        int i = 0;
        for (int j = 1; j <= n; j++) {
            if (p.charAt(j - 1) == '*')
                dp[i][j] = dp[i][j - 1];
        }

        for (i = 1; i <= m; i++) {
            char c1 = s.charAt(i - 1);
            for (int j = 1; j <= n; j++) {
                char c2 = p.charAt(j - 1);
                if (c2 == '*')
                    dp[i][j] = dp[i][j - 1] | dp[i - 1][j];
                else if (c2 == c1 || c2 == '?')
                    dp[i][j] = dp[i - 1][j - 1];
            }
        }


        return dp[m][n];
    }

    public static void main(String[] args) {
        通配符匹配 s = new 通配符匹配();
        System.out.println(s.isMatch("qq", "*"));
    }
}
